APCI Analysis of Self-Rated Health

Age-Period-Cohort-Interaction model (Luo & Hodges, 2020) across 6 US surveys

Author

Christine Lucille Kuryla

Published

February 10, 2026

Show code
library(tidyverse)
library(here)
library(APCI)
library(patchwork)
library(knitr)
library(kableExtra)

is_html <- knitr::is_html_output()

# Helper: apply kable_styling only for HTML output
styled_kable <- function(k, ...) {
  if (is_html) kable_styling(k, ...) else k
}

source(here::here("R", "paths.R"))
source(here::here("R", "functions", "theme_srh.R"))
source(here::here("R", "functions", "plot_utils.R"))
source(here::here("R", "functions", "apci_analysis.R"))

apci_output_dir <- here::here("output", "apc", "apci")

# Survey order and labels
surveys <- c("gss", "nhanes", "meps", "nhis", "cps", "brfss")

1 Overview

This report presents an APCI (Age-Period-Cohort-Interaction) analysis of self-rated health (SRH) across six US surveys. The APCI model (Luo & Hodges, 2020) provides a third APC decomposition method, complementing the median polish (non-parametric descriptive) and BHAPC (Bayesian hierarchical parametric) approaches.

1.1 What Makes APCI Different

The APCI model reframes the classic APC identification problem. Instead of trying to separately estimate three perfectly collinear effects (age + period + cohort), it asks:

“Do period effects vary by age group?”

If yes, that variation is the cohort effect. This maps directly onto Ryder’s (1965) theory that cohort differentiation arises when historical changes affect age groups differentially.

1.2 Key Outputs

Output Meaning
Age main effects Expected SRH by age group, averaging over periods
Period main effects Expected SRH by period, averaging over age groups
Cohort averages (inter-cohort) Which birth cohorts deviate from age+period main effects?
Cohort slopes (intra-cohort) Do cohort differences accumulate, diminish, or stay constant with age?

1.3 Convergence Context

The SRH convergence phenomenon operates from both directions: younger ages report lower SRH over time while older ages report better SRH. If this has a cohort component, we expect:

  • Negative cohort averages for recent birth cohorts (health worse than age+period predict)
  • Positive cohort averages for older cohorts (health better than expected)
  • The intra-cohort slopes reveal whether these differences accumulate, diminish, or stay constant

1.4 Surveys

SRH is coded higher = better. All surveys use weights via the weight argument in apci().
Survey SRH Scale Design Note
GSS 1–4 Weights only
NHANES 1–5 Weights only (APCI uses glm, not survey design)
MEPS 1–5 Weights only (APCI uses glm, not survey design)
NHIS 1–5 Weights only (APCI uses glm, not survey design)
CPS 1–5 Weights only
BRFSS 1–5 Weights only

1.5 Limitation: Survey Design

The APCI package uses glm() internally with a weights argument. This produces survey-weighted point estimates but standard errors do not account for complex survey design (strata/PSU clustering). Point estimates are correct; inference (p-values, CIs) should be interpreted cautiously as potentially anti-conservative for surveys with design effects (NHIS, MEPS, NHANES).

Show code
# Load combined results from CSVs (avoids memory issues with large RDS files)
all_age_effects    <- read_csv(file.path(apci_output_dir, "apci_age_effects_all.csv"),
                               show_col_types = FALSE)
all_period_effects <- read_csv(file.path(apci_output_dir, "apci_period_effects_all.csv"),
                               show_col_types = FALSE)
all_cohort_avgs    <- read_csv(file.path(apci_output_dir, "apci_cohort_avgs_all.csv"),
                               show_col_types = FALSE)
all_cohort_slopes  <- read_csv(file.path(apci_output_dir, "apci_cohort_slopes_all.csv"),
                               show_col_types = FALSE)
deviance_summary   <- read_csv(file.path(apci_output_dir, "apci_deviance_summary.csv"),
                               show_col_types = FALSE)

sv_levels <- toupper(surveys)

# Note: Per-survey RDS files are not loaded here to avoid memory issues.
# All cross-survey data comes from the combined CSVs above.

2 Summary Table

Show code
deviance_summary |>
  mutate(
    `Sig. Cohort Avgs` = paste0(n_sig_avg, "/", n_cohorts),
    `Sig. Cohort Slopes` = paste0(n_sig_slope, "/", n_cohorts)
  ) |>
  select(Survey = survey, `N Cohorts` = n_cohorts,
         `Sig. Cohort Avgs`, `Sig. Cohort Slopes`) |>
  kable(caption = "APCI model summary across surveys. Significance at p < 0.05.") |>
  styled_kable(bootstrap_options = c("striped", "hover", "condensed"),
               full_width = FALSE)
Table 1: APCI model summary across surveys. Significance at p
Survey N Cohorts Sig. Cohort Avgs Sig. Cohort Slopes
BRFSS 20 11/20 6/20
CPS 20 19/20 15/20
GSS 24 18/24 9/24
MEPS 18 10/18 14/18
NHANES 16 6/16 7/16
NHIS 22 18/22 17/22

3 Cross-Survey Results

3.1 Cohort Deviations (Inter-Cohort)

These plots show the average deviation of each birth cohort from the age + period main effects. Positive values mean the cohort has higher SRH than expected; negative values mean lower SRH than expected.

Show code
plot_apci_cohort_avgs_all(all_cohort_avgs, survey_order = sv_levels)
Figure 1: Inter-cohort deviations from age+period main effects across surveys. Filled points = p < 0.05. Positive = better-than-expected SRH for that cohort.

3.2 Cohort Slopes (Intra-Cohort)

These plots show the intra-cohort life-course slopes. A positive slope means the cohort’s advantage (or disadvantage) accumulates with age; a negative slope means it diminishes; near-zero means it stays constant.

Show code
plot_apci_cohort_slopes_all(all_cohort_slopes, survey_order = sv_levels)
Figure 2: Intra-cohort life-course slopes across surveys. Positive = accumulating advantage with age; Negative = accumulating disadvantage. Filled = p < 0.05.

3.3 Main Effects (Age & Period)

Show code
plot_apci_main_effects_all(all_age_effects, all_period_effects,
                            survey_order = sv_levels)
Figure 3: APCI age (blue) and period (green) main effects across surveys.

4 Cohort Deviation Details

4.1 Significant Cohort Deviations

Show code
sig_cohorts <- all_cohort_avgs |>
  filter(p_value < 0.05, !is.na(cohort_midpoint)) |>
  mutate(
    `Birth Year` = round(cohort_midpoint),
    Estimate = round(estimate, 4),
    SE = round(se, 4),
    `95% CI` = paste0("[", round(ci_lower, 4), ", ", round(ci_upper, 4), "]"),
    p = sprintf("%.4f", p_value)
  ) |>
  select(Survey = survey, `Birth Year`, Estimate, SE, `95% CI`, p, sig) |>
  arrange(Survey, `Birth Year`)

kable(sig_cohorts,
      caption = "Birth cohorts with significant (p < 0.05) deviations from age+period main effects. Positive = better SRH than expected.") |>
  styled_kable(bootstrap_options = c("striped", "hover", "condensed"),
               full_width = FALSE, font_size = 11)
Table 2: Birth cohorts with significant (p
Survey Birth Year Estimate SE 95% CI p sig
BRFSS 1904 -0.2022 0.0390 [-0.2787, -0.1257] 0.0000 ***
BRFSS 1910 -0.1479 0.0233 [-0.1936, -0.1022] 0.0000 ***
BRFSS 1914 -0.1106 0.0155 [-0.1411, -0.0802] 0.0000 ***
BRFSS 1920 -0.1090 0.0120 [-0.1326, -0.0854] 0.0000 ***
BRFSS 1924 -0.0484 0.0102 [-0.0683, -0.0285] 0.0000 ***
BRFSS 1934 0.0607 0.0074 [0.0461, 0.0753] 0.0000 ***
BRFSS 1940 0.0873 0.0125 [0.0629, 0.1118] 0.0000 ***
BRFSS 1944 0.0682 0.0152 [0.0383, 0.098] 0.0000 ***
BRFSS 1950 0.0554 0.0122 [0.0316, 0.0793] 0.0000 ***
BRFSS 1954 0.0400 0.0123 [0.0159, 0.0642] 0.0012 **
BRFSS 1980 -0.0820 0.0173 [-0.1159, -0.0481] 0.0000 ***
CPS 1910 -0.1301 0.0169 [-0.1632, -0.0969] 0.0000 ***
CPS 1914 -0.1163 0.0101 [-0.1362, -0.0965] 0.0000 ***
CPS 1920 -0.0986 0.0059 [-0.1102, -0.0871] 0.0000 ***
CPS 1924 -0.0668 0.0048 [-0.0763, -0.0574] 0.0000 ***
CPS 1930 -0.0301 0.0041 [-0.0381, -0.0221] 0.0000 ***
CPS 1940 0.0407 0.0043 [0.0324, 0.0491] 0.0000 ***
CPS 1944 0.0637 0.0037 [0.0565, 0.0708] 0.0000 ***
CPS 1950 0.0501 0.0030 [0.0443, 0.056] 0.0000 ***
CPS 1954 0.0343 0.0027 [0.029, 0.0395] 0.0000 ***
CPS 1960 0.0261 0.0025 [0.0212, 0.0311] 0.0000 ***
CPS 1964 0.0222 0.0024 [0.0174, 0.027] 0.0000 ***
CPS 1970 0.0283 0.0024 [0.0235, 0.0331] 0.0000 ***
CPS 1974 0.0146 0.0024 [0.01, 0.0193] 0.0000 ***
CPS 1980 -0.0097 0.0025 [-0.0146, -0.0047] 0.0001 ***
CPS 1984 -0.0283 0.0028 [-0.0337, -0.0229] 0.0000 ***
CPS 1990 -0.0419 0.0032 [-0.0482, -0.0357] 0.0000 ***
CPS 1994 -0.0699 0.0041 [-0.078, -0.0618] 0.0000 ***
CPS 2000 -0.1036 0.0059 [-0.1151, -0.0921] 0.0000 ***
CPS 2004 -0.1005 0.0106 [-0.1212, -0.0798] 0.0000 ***
GSS 1900 -0.1125 0.0461 [-0.2029, -0.0221] 0.0147 *
GSS 1904 -0.1223 0.0369 [-0.1945, -0.05] 0.0009 ***
GSS 1910 -0.0692 0.0297 [-0.1275, -0.0109] 0.0201 *
GSS 1914 -0.0763 0.0261 [-0.1275, -0.0251] 0.0035 **
GSS 1920 -0.0550 0.0227 [-0.0995, -0.0104] 0.0156 *
GSS 1930 0.0626 0.0199 [0.0235, 0.1016] 0.0017 **
GSS 1934 0.0534 0.0199 [0.0144, 0.0925] 0.0074 **
GSS 1940 0.1057 0.0159 [0.0746, 0.1368] 0.0000 ***
GSS 1944 0.1019 0.0143 [0.0738, 0.1299] 0.0000 ***
GSS 1950 0.0926 0.0116 [0.07, 0.1153] 0.0000 ***
GSS 1954 0.0454 0.0123 [0.0214, 0.0694] 0.0002 ***
GSS 1960 0.0426 0.0125 [0.0182, 0.0671] 0.0006 ***
GSS 1974 -0.0802 0.0163 [-0.1121, -0.0483] 0.0000 ***
GSS 1980 -0.0643 0.0177 [-0.0989, -0.0296] 0.0003 ***
GSS 1984 -0.1185 0.0209 [-0.1595, -0.0775] 0.0000 ***
GSS 1990 -0.1650 0.0249 [-0.2138, -0.1161] 0.0000 ***
GSS 1994 -0.1421 0.0323 [-0.2054, -0.0789] 0.0000 ***
GSS 2000 -0.1387 0.0383 [-0.2136, -0.0637] 0.0003 ***
MEPS 1914 -0.0570 0.0243 [-0.1046, -0.0093] 0.0191 *
MEPS 1920 -0.0456 0.0157 [-0.0764, -0.0147] 0.0038 **
MEPS 1924 -0.0446 0.0116 [-0.0673, -0.022] 0.0001 ***
MEPS 1930 -0.0328 0.0094 [-0.0513, -0.0144] 0.0005 ***
MEPS 1940 0.0323 0.0078 [0.0171, 0.0476] 0.0000 ***
MEPS 1944 0.0436 0.0065 [0.0307, 0.0564] 0.0000 ***
MEPS 1950 0.0242 0.0058 [0.0128, 0.0356] 0.0000 ***
MEPS 1960 0.0123 0.0054 [0.0017, 0.0229] 0.0231 *
MEPS 1994 -0.0558 0.0107 [-0.0767, -0.0348] 0.0000 ***
MEPS 2000 -0.0487 0.0195 [-0.087, -0.0105] 0.0126 *
NHANES 1924 -0.1723 0.0407 [-0.252, -0.0926] 0.0000 ***
NHANES 1930 -0.1044 0.0303 [-0.1637, -0.0451] 0.0006 ***
NHANES 1944 0.0609 0.0192 [0.0234, 0.0985] 0.0015 **
NHANES 1944 0.0468 0.0174 [0.0127, 0.0808] 0.0071 **
NHANES 1948 0.0396 0.0166 [0.007, 0.0721] 0.0171 *
NHANES 1964 -0.0554 0.0191 [-0.0929, -0.018] 0.0037 **
NHIS 1910 -0.0737 0.0108 [-0.0949, -0.0525] 0.0000 ***
NHIS 1914 -0.0899 0.0084 [-0.1065, -0.0734] 0.0000 ***
NHIS 1920 -0.0565 0.0073 [-0.0707, -0.0422] 0.0000 ***
NHIS 1924 -0.0379 0.0063 [-0.0503, -0.0255] 0.0000 ***
NHIS 1934 0.0317 0.0056 [0.0208, 0.0427] 0.0000 ***
NHIS 1940 0.0653 0.0050 [0.0555, 0.0751] 0.0000 ***
NHIS 1944 0.0673 0.0043 [0.0589, 0.0757] 0.0000 ***
NHIS 1950 0.0660 0.0039 [0.0584, 0.0735] 0.0000 ***
NHIS 1954 0.0318 0.0036 [0.0247, 0.0388] 0.0000 ***
NHIS 1960 0.0155 0.0035 [0.0086, 0.0224] 0.0000 ***
NHIS 1964 -0.0073 0.0036 [-0.0143, -2e-04] 0.0435 *
NHIS 1970 -0.0233 0.0039 [-0.031, -0.0156] 0.0000 ***
NHIS 1974 -0.0261 0.0043 [-0.0345, -0.0178] 0.0000 ***
NHIS 1980 -0.0502 0.0045 [-0.0591, -0.0413] 0.0000 ***
NHIS 1984 -0.0424 0.0051 [-0.0523, -0.0325] 0.0000 ***
NHIS 1990 -0.0612 0.0059 [-0.0728, -0.0497] 0.0000 ***
NHIS 1994 -0.0458 0.0078 [-0.061, -0.0305] 0.0000 ***
NHIS 2000 -0.0489 0.0114 [-0.0713, -0.0265] 0.0000 ***

4.2 Significant Cohort Slopes

Show code
sig_slopes <- all_cohort_slopes |>
  filter(p_value < 0.05, !is.na(cohort_midpoint)) |>
  mutate(
    `Birth Year` = round(cohort_midpoint),
    Estimate = round(estimate, 4),
    SE = round(se, 4),
    `95% CI` = paste0("[", round(ci_lower, 4), ", ", round(ci_upper, 4), "]"),
    p = sprintf("%.4f", p_value),
    Interpretation = interpretation
  ) |>
  select(Survey = survey, `Birth Year`, Estimate, SE, `95% CI`, p,
         Interpretation) |>
  arrange(Survey, `Birth Year`)

kable(sig_slopes,
      caption = "Birth cohorts with significant (p < 0.05) intra-cohort slopes. Positive = accumulating advantage with age.") |>
  styled_kable(bootstrap_options = c("striped", "hover", "condensed"),
               full_width = FALSE, font_size = 11)
Table 3: Birth cohorts with significant (p
Survey Birth Year Estimate SE 95% CI p Interpretation
BRFSS 1920 0.0576 0.0247 [0.0093, 0.1059] 0.0194 Accumulating advantage
BRFSS 1924 0.0537 0.0250 [0.0047, 0.1027] 0.0318 Accumulating advantage
BRFSS 1930 0.0806 0.0254 [0.0308, 0.1304] 0.0015 Accumulating advantage
BRFSS 1960 -0.1185 0.0510 [-0.2185, -0.0185] 0.0202 Accumulating disadvantage
BRFSS 1980 -0.1544 0.0500 [-0.2524, -0.0564] 0.0020 Accumulating disadvantage
BRFSS 1990 -0.1342 0.0594 [-0.2506, -0.0178] 0.0238 Accumulating disadvantage
CPS 1920 0.0722 0.0103 [0.052, 0.0923] 0.0000 Accumulating advantage
CPS 1924 0.0915 0.0097 [0.0725, 0.1106] 0.0000 Accumulating advantage
CPS 1930 0.1205 0.0091 [0.1027, 0.1384] 0.0000 Accumulating advantage
CPS 1934 0.1184 0.0090 [0.1008, 0.136] 0.0000 Accumulating advantage
CPS 1940 0.0980 0.0134 [0.0718, 0.1242] 0.0000 Accumulating advantage
CPS 1944 0.1001 0.0116 [0.0774, 0.1228] 0.0000 Accumulating advantage
CPS 1950 0.0421 0.0093 [0.0238, 0.0603] 0.0000 Accumulating advantage
CPS 1960 -0.0328 0.0079 [-0.0484, -0.0173] 0.0000 Accumulating disadvantage
CPS 1964 -0.1004 0.0078 [-0.1157, -0.0851] 0.0000 Accumulating disadvantage
CPS 1970 -0.1213 0.0079 [-0.1367, -0.1058] 0.0000 Accumulating disadvantage
CPS 1974 -0.1026 0.0076 [-0.1176, -0.0876] 0.0000 Accumulating disadvantage
CPS 1980 -0.0796 0.0074 [-0.094, -0.0652] 0.0000 Accumulating disadvantage
CPS 1984 -0.1068 0.0072 [-0.1209, -0.0927] 0.0000 Accumulating disadvantage
CPS 1990 -0.1038 0.0073 [-0.1182, -0.0895] 0.0000 Accumulating disadvantage
CPS 1994 -0.0836 0.0078 [-0.0989, -0.0682] 0.0000 Accumulating disadvantage
GSS 1894 -0.2041 0.1016 [-0.4032, -0.0049] 0.0446 Accumulating disadvantage
GSS 1900 0.2037 0.0937 [0.02, 0.3873] 0.0297 Accumulating advantage
GSS 1910 0.1637 0.0748 [0.0171, 0.3103] 0.0286 Accumulating advantage
GSS 1940 0.1018 0.0510 [0.0019, 0.2017] 0.0459 Accumulating advantage
GSS 1970 -0.1053 0.0411 [-0.1858, -0.0248] 0.0103 Accumulating disadvantage
GSS 1974 -0.1003 0.0379 [-0.1745, -0.026] 0.0081 Accumulating disadvantage
GSS 1980 -0.1281 0.0369 [-0.2005, -0.0557] 0.0005 Accumulating disadvantage
GSS 1984 -0.1282 0.0395 [-0.2056, -0.0508] 0.0012 Accumulating disadvantage
GSS 1990 -0.1354 0.0414 [-0.2165, -0.0543] 0.0011 Accumulating disadvantage
MEPS 1920 0.0689 0.0215 [0.0268, 0.111] 0.0013 Accumulating advantage
MEPS 1924 0.0963 0.0190 [0.059, 0.1336] 0.0000 Accumulating advantage
MEPS 1930 0.0727 0.0176 [0.0383, 0.1071] 0.0000 Accumulating advantage
MEPS 1934 0.0704 0.0198 [0.0316, 0.1091] 0.0004 Accumulating advantage
MEPS 1940 0.0701 0.0176 [0.0357, 0.1046] 0.0001 Accumulating advantage
MEPS 1944 0.0449 0.0148 [0.016, 0.0739] 0.0023 Accumulating advantage
MEPS 1960 -0.0576 0.0124 [-0.0819, -0.0332] 0.0000 Accumulating disadvantage
MEPS 1964 -0.0562 0.0126 [-0.0808, -0.0315] 0.0000 Accumulating disadvantage
MEPS 1970 -0.0625 0.0124 [-0.0869, -0.0382] 0.0000 Accumulating disadvantage
MEPS 1974 -0.0666 0.0129 [-0.092, -0.0412] 0.0000 Accumulating disadvantage
MEPS 1980 -0.0352 0.0130 [-0.0606, -0.0098] 0.0066 Accumulating disadvantage
MEPS 1984 -0.0513 0.0132 [-0.0771, -0.0255] 0.0001 Accumulating disadvantage
MEPS 1990 -0.0469 0.0129 [-0.0721, -0.0217] 0.0003 Accumulating disadvantage
MEPS 1994 -0.0525 0.0146 [-0.0811, -0.024] 0.0003 Accumulating disadvantage
NHANES 1934 0.1431 0.0400 [0.0647, 0.2215] 0.0003 Accumulating advantage
NHANES 1940 0.0931 0.0393 [0.016, 0.1701] 0.0179 Accumulating advantage
NHANES 1944 0.0811 0.0363 [0.0099, 0.1523] 0.0256 Accumulating advantage
NHANES 1948 -0.0835 0.0349 [-0.1518, -0.0152] 0.0166 Accumulating disadvantage
NHANES 1954 -0.1359 0.0371 [-0.2085, -0.0632] 0.0002 Accumulating disadvantage
NHANES 1954 -0.0924 0.0367 [-0.1644, -0.0204] 0.0119 Accumulating disadvantage
NHANES 1958 -0.1282 0.0401 [-0.2069, -0.0495] 0.0014 Accumulating disadvantage
NHIS 1900 0.0985 0.0283 [0.043, 0.154] 0.0005 Accumulating advantage
NHIS 1910 0.0834 0.0215 [0.0412, 0.1256] 0.0001 Accumulating advantage
NHIS 1914 0.0368 0.0180 [0.0015, 0.072] 0.0410 Accumulating advantage
NHIS 1920 0.0572 0.0179 [0.0221, 0.0924] 0.0014 Accumulating advantage
NHIS 1930 0.0438 0.0177 [0.009, 0.0786] 0.0136 Accumulating advantage
NHIS 1934 0.0476 0.0171 [0.0141, 0.0811] 0.0054 Accumulating advantage
NHIS 1940 0.0422 0.0153 [0.0122, 0.0722] 0.0059 Accumulating advantage
NHIS 1944 0.0304 0.0130 [0.0049, 0.0558] 0.0193 Accumulating advantage
NHIS 1954 -0.0436 0.0110 [-0.0651, -0.0221] 0.0001 Accumulating disadvantage
NHIS 1960 -0.0440 0.0111 [-0.0657, -0.0223] 0.0001 Accumulating disadvantage
NHIS 1964 -0.0472 0.0101 [-0.067, -0.0273] 0.0000 Accumulating disadvantage
NHIS 1970 -0.0500 0.0108 [-0.0712, -0.0289] 0.0000 Accumulating disadvantage
NHIS 1974 -0.0679 0.0108 [-0.0891, -0.0466] 0.0000 Accumulating disadvantage
NHIS 1980 -0.0922 0.0099 [-0.1116, -0.0729] 0.0000 Accumulating disadvantage
NHIS 1984 -0.0983 0.0101 [-0.1181, -0.0785] 0.0000 Accumulating disadvantage
NHIS 1990 -0.0605 0.0099 [-0.0799, -0.0412] 0.0000 Accumulating disadvantage
NHIS 1994 -0.0589 0.0108 [-0.0801, -0.0377] 0.0000 Accumulating disadvantage

5 Per-Survey Detail

Show code
for (sv_label in sv_levels) {
  cat("\n\n## ", sv_label, " {.unnumbered}\n\n")

  sv_avgs <- all_cohort_avgs |> filter(survey == sv_label)
  sv_slopes <- all_cohort_slopes |> filter(survey == sv_label)

  n_sig_avg <- sum(sv_avgs$p_value < 0.05, na.rm = TRUE)
  n_total <- nrow(sv_avgs)
  n_sig_slope <- sum(sv_slopes$p_value < 0.05, na.rm = TRUE)

  cat("**Significant cohort deviations:**", n_sig_avg, "/", n_total, " | ",
      "**Significant cohort slopes:**", n_sig_slope, "/", nrow(sv_slopes), "\n\n")
}

GSS

Significant cohort deviations: 18 / 24 | Significant cohort slopes: 9 / 24

NHANES

Significant cohort deviations: 6 / 16 | Significant cohort slopes: 7 / 16

MEPS

Significant cohort deviations: 10 / 18 | Significant cohort slopes: 14 / 18

NHIS

Significant cohort deviations: 18 / 22 | Significant cohort slopes: 17 / 22

CPS

Significant cohort deviations: 19 / 20 | Significant cohort slopes: 15 / 20

BRFSS

Significant cohort deviations: 11 / 20 | Significant cohort slopes: 6 / 20

5.0.1 Per-survey combined plots

The combined plots for each survey (main effects + cohort averages + cohort slopes) are saved in output/apc/apci/apci_combined_{survey}.png. See those files for detailed per-survey visualizations.

6 Comparison with Other APC Methods

6.1 Median Polish vs APCI

Aspect Median Polish APCI
Type Non-parametric descriptive Parametric inferential
Identification Not formally identified Fully identified (interaction-based)
Hypothesis tests None (descriptive only) Global F-test, local z-tests
Cohort concept Residuals from AP matrix Age-by-period interaction
Cohort dynamics Static effect only Intra-cohort slopes (accumulation/leveling)
Advantages No distributional assumptions, robust to outliers Formal inference, richer cohort characterization
Limitations No CIs or p-values Assumes GLM; SEs don’t account for survey design

6.2 BHAPC vs APCI

Aspect BHAPC APCI
Framework Bayesian (rstanarm) Frequentist (glm)
APC effects Crossed random effects Fixed main effects + interaction
Identification Variance decomposition Interaction = cohort
Cohort concept Random cohort intercepts Inter-cohort deviations + intra-cohort slopes
Inference Posterior distributions z-tests, F-test
Computation Slow (MCMC) Fast (glm)

7 Interpretation for Convergence Paper

The APCI results provide formal statistical evidence for the convergence phenomenon:

  1. Do cohort effects exist? The number of significant cohort deviations across surveys answers this.

  2. Which cohorts are affected? The cohort averages identify which birth cohorts deviate from age+period expectations — recent cohorts (born ~1980+) with negative deviations would support the “declining youth SRH” component of convergence.

  3. Is convergence from both directions? Older cohorts (born ~1930-1950) with positive deviations would confirm the “improving older SRH” component.

  4. Do effects accumulate? Intra-cohort slopes reveal whether cohort advantages/disadvantages grow with age (cumulative advantage theory) or diminish (age-as-leveler).


Report generated 2026-02-10 12:52:47.429638